Integer to Roman

Given an integer, convert it to a roman numeral.

Input is guaranteed to be within the range from 1 to 3999.

Solution:

  1. public class Solution {
  2. private char[][] romans = {
  3. {'I', 'V', 'X'},
  4. {'X', 'L', 'C'},
  5. {'C', 'D', 'M'},
  6. {'M', ' ', ' '}
  7. };
  8. public String intToRoman(int num) {
  9. StringBuilder sb = new StringBuilder();
  10. ArrayList<Integer> digits = new ArrayList<Integer>();
  11. while (num > 0) {
  12. digits.add(num % 10);
  13. num /= 10;
  14. }
  15. int size = digits.size();
  16. for (int i = size - 1; i >= 0; i--) {
  17. String roman = getRoman(i, digits.get(i));
  18. sb.append(roman);
  19. }
  20. return sb.toString();
  21. }
  22. private String getRoman(int level, int digit) {
  23. char one = romans[level][0];
  24. char five = romans[level][1];
  25. char ten = romans[level][2];
  26. StringBuilder sb = new StringBuilder();
  27. if (digit == 9) {
  28. sb.append(one).append(ten);
  29. }
  30. else if (digit >= 5) {
  31. sb.append(five);
  32. for (int i = 0; i < digit - 5; i++) {
  33. sb.append(one);
  34. }
  35. }
  36. else if (digit == 4) {
  37. sb.append(one).append(five);
  38. }
  39. else {
  40. for (int i = 0; i < digit; i++) {
  41. sb.append(one);
  42. }
  43. }
  44. return sb.toString();
  45. }
  46. }